/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI.Cadastro;

import Facade.Facade;
import Objetos.Cliente;
import Objetos.Usuario;
import Objetos.ValoresFixos;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author celio
 */
public final class CadastroCliente extends JPanel {

    JLabel nome, tipo, cpf, cnpj, email,num;
    JFormattedTextField tCpf, tCnpj;
    MaskFormatter mascaraCpf, mascaraCnpj, mascaraTelefone;
    JTextField tNome, tEmail, tNum;
    ButtonGroup tTipo;
    JRadioButton fisica, juridica;
    JButton cadastrar, alterar, limpar, sair;
    Facade fa;
    Cliente cli;
    JTable objetos;
    JScrollPane scroller;
    JLabel telefone;
    JFormattedTextField tTelefone;
    JCheckBox locadora;

    public CadastroCliente(final Usuario usu)  {

        JLabel tela = new JLabel("... :::   Cadastro de Cliente   ::: ...");
        tela.setBounds(400, 10, 500, 20);
        add(tela);

        nome = new JLabel("Nome: ");
        tNome = new JTextField(40);

        tipo = new JLabel("Tipo: ");
        tTipo = new ButtonGroup();
        fisica = new JRadioButton("1-Pessoa Física");
        juridica = new JRadioButton("2-Pessoa Jurídica");
        fisica.setBackground(Color.LIGHT_GRAY);
        juridica.setBackground(Color.LIGHT_GRAY);
        tTipo.add(fisica);
        tTipo.add(juridica);

        cpf = new JLabel("CPF: ");
        try {
            mascaraCpf = new MaskFormatter("###.###.###-##");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        tCpf = new JFormattedTextField(mascaraCpf);

        cnpj = new JLabel("CNPJ: ");
        try {
            mascaraCnpj = new MaskFormatter("##.###.###/####-##");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        tCnpj = new JFormattedTextField(mascaraCnpj);
        
        telefone = new JLabel("Tel: ");
        try {
            mascaraTelefone = new MaskFormatter("(##)####-####");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        tTelefone = new JFormattedTextField(mascaraTelefone);
        
        locadora = new JCheckBox("Locadora");
        locadora.setBackground(Color.LIGHT_GRAY);
        
        num = new JLabel("N: ");
        tNum = new JTextField();
        
        email = new JLabel("Email: ");
        tEmail = new JTextField(30);

        cadastrar = new JButton("Cadastrar");
        alterar = new JButton("Alterar");
        limpar = new JButton("Limpar");
        sair = new JButton("Sair");

        nome.setBounds(10, 50, 100, 20);
        tNome.setBounds(70, 50, 120, 20);

        locadora.setBounds(220, 50, 100, 20);
        
        tipo.setBounds(10, 80, 100, 20);
        fisica.setBounds(70, 80, 130, 20);
        juridica.setBounds(200, 80, 130, 20);

        cpf.setBounds(10, 110, 60, 20);
        tCpf.setBounds(70, 110, 100, 20);
        cnpj.setBounds(10, 110, 60, 20);
        tCnpj.setBounds(70, 110, 120, 20);
        num.setBounds(10, 110, 60, 20);
        tNum.setBounds(70, 110, 100, 20);

        email.setBounds(10, 140, 100, 20);
        tEmail.setBounds(70, 140, 150, 20);
        
        telefone.setBounds(10, 170, 80, 20);
        tTelefone.setBounds(70, 170, 100, 20);

        cadastrar.setBounds(20, 200, 100, 20);
        alterar.setBounds(350, 450, 100, 20);
        limpar.setBounds(120, 200, 100, 20);
        sair.setBounds(220, 200, 100, 20);

        add(nome);
        add(tNome);

        add(tipo);
        add(fisica);
        add(juridica);
        
        add(locadora);

        add(cpf);
        add(tCpf);
        add(cnpj);
        add(tCnpj);
        add(num);
        add(tNum);
        
        add(telefone);
        add(tTelefone);

        cpf.setVisible(false);
        tCpf.setVisible(false);
        cnpj.setVisible(false);
        tCnpj.setVisible(false);
        num.setVisible(false);
        tNum.setVisible(false);

        add(email);
        add(tEmail);

        add(cadastrar);
        add(alterar);
        add(limpar);
        add(sair);

        alterar.setEnabled(false);
        atualizaTabela(usu);

        cadastrar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                fa = new Facade();
                cli = new Cliente();
               
                cli.setNome(tNome.getText());
                String tipo = null;
                String numeroCadastro = null;
                if (fisica.isSelected()) {
                    tipo = "1";
                    numeroCadastro = tCpf.getText();
                } else if (juridica.isSelected()) {
                    tipo = "2";
                    numeroCadastro = tCnpj.getText();
                }

                cli.setTipo(tipo);
                if (locadora.isSelected()) {

                            cli.setLocadora(ValoresFixos.TipoClienteLocadora.Locadora.getTipo());
                        } else {

                            cli.setLocadora(ValoresFixos.TipoClienteLocadora.NaoLocadora.getTipo());

                        }
                
                cli.setNumeroCadastro(numeroCadastro);
                if (Funcoes.funcoes.validaEmail(tEmail.getText()) == false) {

                    JOptionPane.showMessageDialog(null, "Email inválido");
                } else {
                    cli.setEmail(tEmail.getText());
                    cli.setTelefone(tTelefone.getText());

                    fa.adicionar_Cliente(cli, usu);

                    tNome.setText("");
                    tTipo.clearSelection();
                    tCnpj.setText("");
                    tCpf.setText("");
                    tEmail.setText("");
                    tTelefone.setText("");
                    locadora.setSelected(false);
                    cpf.setVisible(false);
                    tCpf.setVisible(false);
                    cnpj.setVisible(false);
                    tCnpj.setVisible(false);
                    atualizaTabela(usu);

                }

            }
        });

        fisica.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                cpf.setVisible(true);
                tCpf.setVisible(true);
                cnpj.setVisible(false);
                tCnpj.setVisible(false);

            }
        });

        juridica.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                cpf.setVisible(false);
                tCpf.setVisible(false);
                cnpj.setVisible(true);
                tCnpj.setVisible(true);

            }
        });
        
        objetos.addMouseListener(new MouseListener() {

            @Override
            public void mouseClicked(MouseEvent e) {
                
                fa = new Facade();
                Cliente antes = fa.procurar_Cliente(objetos.getValueAt(objetos.getSelectedRow(), 0).toString(),usu);
                tipo.setVisible(false);
                cpf.setVisible(false);
                tCpf.setVisible(false);
                cnpj.setVisible(false);
                tCnpj.setVisible(false);
                num.setVisible(true);
                tNum.setVisible(true);
                tNome.setText(antes.getNome());
                tNum.setText(antes.getNumeroCadastro());
                if(antes.getLocadora().equalsIgnoreCase(ValoresFixos.TipoClienteLocadora.Locadora.getTipo())){
                    
                    locadora.setSelected(true);
                }else{
                    locadora.setSelected(false);
                }
                tNum.setEditable(false);
                tEmail.setText(antes.getEmail());
                tTelefone.setText(antes.getTelefone());
                alterar.setEnabled(true);
                cadastrar.setEnabled(false);
                
                
            }

            @Override
            public void mousePressed(MouseEvent e) {
               }

            @Override
            public void mouseReleased(MouseEvent e) {
               }

            @Override
            public void mouseEntered(MouseEvent e) {
             }

            @Override
            public void mouseExited(MouseEvent e) {
               }
        });

        limpar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                tNome.setText("");
                tCnpj.setText("");
                tCpf.setText("");
                tEmail.setText("");
                tTelefone.setText("");
                tNum.setText("");
                cpf.setVisible(false);
                tCpf.setVisible(false);
                cnpj.setVisible(false);
                tCnpj.setVisible(false);
                locadora.setSelected(false);
                tNum.setVisible(false);
                
                alterar.setEnabled(false);
                cadastrar.setEnabled(true);

            }
        });

        alterar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                fa = new Facade();
                Cliente antes = fa.procurar_Cliente(objetos.getValueAt(objetos.getSelectedRow(), 0).toString(),usu);
                Cliente depois = new Cliente();
               
                depois.setCod_cliente(TOOL_TIP_TEXT_KEY);
                depois.setNome(tNome.getText());
                
                if (locadora.isSelected()) {

                            depois.setLocadora(ValoresFixos.TipoClienteLocadora.Locadora.getTipo());
                        } else {

                            depois.setLocadora(ValoresFixos.TipoClienteLocadora.NaoLocadora.getTipo());

                        }
                depois.setTelefone(tTelefone.getText());
                depois.setNumeroCadastro(antes.getNumeroCadastro());
                if (Funcoes.funcoes.validaEmail(tEmail.getText()) == false) {

                    JOptionPane.showMessageDialog(null, "Email inválido");
                } else {
                    depois.setEmail(tEmail.getText());

                    fa.alterar_Cliente(antes.getCod_cliente(), depois, usu);

                    tNome.setText("");
                    tTipo.clearSelection();
                    tCnpj.setText("");
                    tCpf.setText("");
                    tEmail.setText("");
                    tTelefone.setText("");
                    cpf.setVisible(false);
                    tCpf.setVisible(false);
                    cnpj.setVisible(false);
                    tCnpj.setVisible(false);
                    num.setVisible(false);
                    tNum.setVisible(false);
                    alterar.setEnabled(false);
                    cadastrar.setEnabled(true);
                    locadora.setSelected(false);
                    atualizaTabela(usu);
                }
            }
        });

        sair.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                setVisible(false);
            }
        });

        setLayout(null);
        setBackground(Color.LIGHT_GRAY);
        setBorder(BorderFactory.createBevelBorder(1, Color.DARK_GRAY, Color.DARK_GRAY));
        setSize(800, 600);
        setVisible(true);
        revalidate();
        repaint();
    }

    public void atualizaTabela(Usuario usu) {

        try {
            remove(scroller);

        } catch (NullPointerException e) {
        }
        fa = new Facade();
        objetos = fa.listarTodos_Cliente(usu);
        objetos.setFont(new Font("Times New Roman", Font.BOLD, 14));
        scroller = new JScrollPane(objetos, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroller.setBounds(350, 50, 720, 400);
        add(scroller);
    }
}
